package com.hyt.it.ogt.ks.service;

import java.util.List;
import java.util.Map;

import com.hyt.it.ogt.ks.feign.model.CandidatePaperInfo;
import com.hyt.it.ogt.ks.feign.model.PaperDataVO;
import com.hyt.it.ogt.ks.model.vo.ExamConfigVO;
import com.hyt.it.ogt.ks.model.vo.SkinVO;
import com.hyt.it.ogt.ks.model.vo.paper.PItemDTO;
import com.hyt.it.ogt.ks.model.vo.paper.PTopicDTO;

/**
 * 缓存-考生相关数据
 */
public interface IExamCacheService {

    /**
     * 获取项目配置信息-缓存
     * @param examId
     * @return
     */
    List<ExamConfigVO> getExamConfigCache(String examId);

    /**
     * 是否练习模式
     * @param examId
     * @return
     */
    boolean isPracticeMode(String examId);

    /**
     * 是否统一开考，统一结束
     * @param examId
     * @return
     */
    boolean isUnifiedStartEnd(String examId);


    /**
     * 获取试卷的结束时间-毫秒数
     * @param examId
     * @return
     */
    Long getPaperEndDateMilli(String examId);

    /**
     * 随机获取一套试卷
     * @param examId
     * @param candidateId
     * @return
     */
    CandidatePaperInfo getCandidatePaperInfoCache(String examId, String candidateId);

    /**
     * 获取试卷信息
     * @param paperId
     * @param paperVersion
     * @return
     */
    PaperDataVO getPaperInfoCache(String paperId, String paperVersion);

    /**
     * 获取试卷信息 -- 无题干/描述  选项无描述信息
     * @param paperId
     * @param paperVersion
     * @return
     */
    PaperDataVO getPaperInfoSimpleCache(String paperId, String paperVersion);

    /**
     * 获取项目发布状态
     * @param examId
     * @return
     */
    Boolean getPublishExam(String examId);

    PItemDTO getPaperItemFromCache(String paperId, String paperVersion, String itemId);

    PTopicDTO getPaperTopicFromCache(String paperId, String paperVersion, String topicId);

    Map<String, PTopicDTO> getPaperTopicListFromCache(String paperId, String paperVersion);

    /**
     * 大题下所有题，包括子小题
     * @param paperId
     * @param paperVersion
     * @param topicId
     * @return
     */
    Map<String, PItemDTO> getPaperItemByTopicId(String paperId, String paperVersion, String topicId);

    CandidatePaperInfo getNewestPaperInfo(String examId, String candidateId);

    /**
     * 考试是否已结束或未发布
     * @param examId
     * @return
     */
    Boolean checkExamFinishOrNotPublish(String examId);

    /**
     * 获取大题下所有小题数量
     * @param paperId
     * @param paperVersion
     * @param topicId
     * @return
     */
    Integer getItemNumberByTopicId(String paperId, String paperVersion, String topicId);

    String getPaperTranslateCache(String paperId, String paperVersion, String id, String language);

    void putTranslateToCache(String paperId, String paperVersion, String language);

    /**
     * 放入encache --> redis --> kwclient
     * @param paperId
     * @param paperVersion
     * @param language
     * @param id
     * @return
     */
    String putPaperTranslateCache(String paperId, String paperVersion, String language,String id);

    /**
     * 手动清理encache里边的缓存
     * @param paperId
     * @param paperVersion
     * @param language
     */
    void clearPaperTransalteEncache(String paperId,String paperVersion,String language);

    /**
     * 手动触发清理encache里的paperInfo的缓存
     * @param pwd
     * @return
     */
    Boolean clearPaperInfoEncache(String pwd);

    /**
     * 手动触发清理redis 中机构的皮肤缓存
     * @param pwd
     * @param examId
     * @return
     */
    Boolean clearProjectSkinRedisCache(String pwd, String examId);

    /**
     * 从缓存中读取机构下考试的皮肤
     * @param projectId
     * @return
     */
    SkinVO getProjectSkin(String projectId);

    /**
     * 从缓存中读取机构下考试的名称
     * @param officeId
     * @return
     */
    String getProjectName(String officeId);
}
